﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ObjectManager;

namespace QuanLyDiem
{
    public partial class frmThongTinDangNhap : Form
    {
        private static frmThongTinDangNhap frm = null;
        private DangNhap dangNhap = new DangNhap();
        private List<string> DSTenQuyen = new List<string>();

        private frmThongTinDangNhap()
        {
            InitializeComponent();
        }

        public static frmThongTinDangNhap Create()
        {
            return Create(false);
        }

        public static frmThongTinDangNhap Create(bool child)
        {
            if (frm == null)
            {
                frm = new frmThongTinDangNhap();
            }
            if (child)
            {
                frm.ControlBox = false;
                frm.MinimizeBox = false;
                frm.MaximizeBox = false;
                frm.WindowState = FormWindowState.Maximized;
            }
            return frm;
        }

        private void frmThongTinDangNhap_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (frm != null)
            {
                frm.Dispose();
                frm = null;
            }
        }

        private void frmThongTinDangNhap_Load(object sender, EventArgs e)
        {
            dgvDangNhap.DataSource = dangNhap.ListAll();
            ClickTimKiem(pnThongTin);
            DSTenQuyen.Add("Chọn");
            DSTenQuyen.AddRange(dangNhap.ListName());
            cmbQuyen.DataSource = DSTenQuyen;
        }

        private void ClickTimKiem(Control control)
        {
            if (control.Controls.Count > 0)
            {
                foreach (Control item in control.Controls)
                {
                    if (item.GetType() == typeof(TextBox) || item.GetType() == typeof(ComboBox))
                    {
                        item.KeyDown += new KeyEventHandler(item_KeyDown);
                    }
                    else
                    {
                        ClickTimKiem(item);
                    }
                }
            }
        }

        private void item_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnTimKiem.PerformClick();
            }
        }

        private void cmniChiTiet_Click(object sender, EventArgs e)
        {
            btnSua.PerformClick();
        }

        private void cmniDoiMatKhau_Click(object sender, EventArgs e)
        {
            btnDoiMatKhau.PerformClick();
        }

        private void cmniXoa_Click(object sender, EventArgs e)
        {
            btnXoa.PerformClick();
        }

        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            string quyen = "";
            if (cmbQuyen.SelectedIndex > 0)
            {
                quyen = cmbQuyen.Text;
            }
            dgvDangNhap.DataSource = dangNhap.ListAll(txtTenDangNhap.Text, txtTen.Text, quyen);
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (dgvDangNhap.SelectedRows.Count > 0)
            {
                DangNhap temp = new DangNhap();
                temp.ThongTin.TenDangNhap = dgvDangNhap.SelectedRows[0].Cells["cTenDangNhap"].Value.ToString();
                temp.ThongTin.Ten = dgvDangNhap.SelectedRows[0].Cells["cTen"].Value.ToString();
                temp.ThongTin.Quyen = int.Parse(dgvDangNhap.SelectedRows[0].Cells["cQuyen"].Value.ToString());
                temp.ThongTin.TenQuyen = dgvDangNhap.SelectedRows[0].Cells["cTenQuyen"].Value.ToString();
                frmThongTinDangNhap_Sua frm = frmThongTinDangNhap_Sua.Create(temp);
                frm.Owner = this;
                frm.UpdateSuccess += new UpdateDangNhap(frm_UpdateSuccess);
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Bạn phải chọn 1 trường để sửa thông tin", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);
            }
        }

        private void frm_UpdateSuccess(object sender, InfoUpdateDangNhap e)
        {
            dgvDangNhap.SelectedRows[0].Cells["cTenDangNhap"].Value = e.DangNhap.ThongTin.TenDangNhap;
            dgvDangNhap.SelectedRows[0].Cells["cTen"].Value = e.DangNhap.ThongTin.Ten;
            dgvDangNhap.SelectedRows[0].Cells["cQuyen"].Value = e.DangNhap.ThongTin.Quyen;
            dgvDangNhap.SelectedRows[0].Cells["cTenQuyen"].Value = e.DangNhap.ThongTin.TenQuyen;
        }

        private void btnDoiMatKhau_Click(object sender, EventArgs e)
        {
            if (dgvDangNhap.SelectedRows.Count > 0)
            {
                frmThongTinDangNhap_DoiMatKhau frm = frmThongTinDangNhap_DoiMatKhau.Create(dgvDangNhap.SelectedRows[0].Cells["cTenDangNhap"].Value.ToString());
                frm.Owner = this;
                frm.Show();
            }
            else
            {
                MessageBox.Show("Bạn phải chọn 1 trường để đổi mật khẩu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (dgvDangNhap.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Bạn có chắc chắn muốn xóa " + dgvDangNhap.SelectedRows.Count + " trường không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    int count = 0;
                    foreach (DataGridViewRow item in dgvDangNhap.SelectedRows)
                    {
                        dangNhap.ThongTin.TenDangNhap = item.Cells["cTenDangNhap"].Value.ToString();
                        int check = dangNhap.Remove();
                        if (check > 0)
                        {
                            dgvDangNhap.Rows.Remove(item);
                        }
                        count += check;
                    }
                    if (count > 0)
                    {
                        MessageBox.Show("Bạn đã xóa thành công " + count + " trường", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show("Đã có vấn đề trong khi xóa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
            else
            {
                MessageBox.Show("Bạn phải chọn ít nhất 1 trường để xóa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);
            }
        }

        private void dgvDangNhap_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            btnSua.PerformClick();
        }
    }
}
